メインコンテンツまでスキップ
バージョン: DAI 7.2

コンテナ内のEggplant DAIのデプロイ

Eggplant DAIは、Helmを使用してKubernetesにインストールできます。以下の要件を満たす必要があります: 以下の要件を満たす必要があります:

要件Notes
Kubernetesクラスタテストバージョン1.24。
ingress-nginxテストバージョン1.3.0 (chartバージョン4.2.1).
Keda v2オプション、オートスケーリングエンジン用。 テストバージョン2.7。
Eggplant DAIライセンス必要に応じてサポートに問い合わせてください。

これらの要件を満たしたら、Helmの値ファイルを作成することで、デフォルトのEggplant DAIデプロイをインストールできます。 以下の例では、独自のデプロイ用にすべての値を置き換えます。

dai.yaml
global:
postgresql:
auth:
postgresPassword: postgres
ingress:
host: dai.example.com
keycloak:
host: dai.example.com
devLicense: a-real-license-goes-here
execLicense: a-real-license-goes-here
objectStorage:
minio:
rootUser: "eggplant"
rootPassword: "eggplant"

keycloak:
externalDatabase:
# This must match the value of global.postgresql.auth.postgresPassword
password: postgres

keycloak-user-provisioner:
adminUsers:
daiAdmin:
username: admin-username
email: admin-email
password: admin-password

いくつかの注意点:

  • global.ingress.hostglobal.keycloak.host は同じドメインである必要はありませんが、解決可能である必要があります。 これは、クラスタにExternalDNSをデプロイするか、手動でレコードを作成してクラスタを指すことで行うことができます。
  • keycloak-user-provisioner.adminUsers.daiAdmin.password は12文字以上である必要があります。 keycloak-user-provisioner.adminUsers の下に追加のキーを追加することで、追加の管理ユーザーを追加することができます。

すべての値の詳細なドキュメントはこちらで見ることができます。

次に、Kubernetesクラスタにそれをデプロイします:

$ helm upgrade --install

--namespace dai

--create-namespace

dai

dai

--repo https://charts.dai.eggplant.cloud

--version 1.13.9

--values dai.yaml

--wait
Release "dai" does not exist. Installing it now.
NAME: dai
LAST DEPLOYED: Fri Feb 17 08:20:17 2023
NAMESPACE: dai
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thank you for installing dai.




Your release is named dai.



To learn more about the release, try:



$ helm status dai
$ helm get all dai



You can access your DAI instance by visiting dai.example.com.



admin username: admin-username
admin password: admin-password

このインストールでは、Bitnami Helmチャートを使用して、必要なサードパーティの依存関係が自動的にインストールおよび設定されます。これらの依存関係は: These dependencies are: These dependencies are: これらの依存関係は以下の通りです:

依存関係テストされたチャートバージョンテストされたアプリバージョン
RabbitMQ11.13.03.11.13
PostgreSQL11.9.1314.7.0
MinIO12.2.62022.2.5
Keycloak10.1.619.0.3
警告

Helmチャートはこれらの依存関係をインストールしますが、PostgreSQLまたはMinIOに格納されているデータのバックアップは管理しません。 ディザスタリカバリ計画の一部として、これらのサービスのバックアップを整理する必要があります。 There's an example of one approach to backups later in this documentation.

サポートされるカスタマイゼーション

デフォルトのインストールでは、PostgreSQLとMinIOのデータが永続ボリュームに保存され、すべての依存関係がKubernetesにデプロイされます。 PostgreSQLまたはAWS S3と互換性のあるオブジェクトストレージの既存のソリューションがあり、それを代わりに使用したい場合は、Eggplant DAIのインストールをカスタマイズして使用することができます。 さらに、valuesファイルの中ではなく、Kubernetesのシークレットを使用して認証情報を渡すことができます。

このドキュメントのセクションでは、インストールをカスタマイズする方法を示す例を示しています。 すべての例では、認証情報にシークレットを使用します。 すべての例は、上記で示したデフォルトのインストール値に追加することを意味するスニペットです。

オブジェクトストレージの設定

Eggplant DAIは、テストスクリーンショットなどのアセットを永続的に保持するために、S3互換のオブジェクトストレージソリューションに依存しています。 Helmチャートはこれを設定するいくつかのオプションを提供しています。

バンドルされたMinIO(デフォルト)

デフォルトでは、Eggplant DAI Helmチャートはランダムなroot-userとroot-passwordでMinIOをサブチャートとしてデプロイします。

You can override these random values by providing an existing secret. First, prepare an existing secret with credentials in:

# dai-objectstorage.yaml \{#dai-objectstorageyaml}

apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: dai-objectstorage
stringData:
root-user: username
root-password: password
$ kubectl -n dai apply -f dai-objectstorage.yaml

次に、既存のシークレットを指すように値ファイルを更新し、Helmアップグレードを実行します:

# dai.yaml \{#daiyaml-1}

global:
objectStorage:
minio:
existingSecret: dai-objectstorage

minio:
auth:
existingSecret: dai-objectstorage

$ helm upgrade dai eggplant/dai --version 1.13.9 -f dai.yaml --wait

注意:global.objectStorage.minio.existingSecretminio.auth.existingSecret は一致する必要があります。

PostgreSQLのインストールはBitnamiチャートによって提供されています。postgresqlキーの下でvaluesファイルにオプションを渡すことで、さらにカスタマイズすることができます。利用可能なオプションについては、Bitnamiのドキュメントを参照してください。 You can further customise it by passing options to it under the postgresql key in your values file. See the Bitnami documentation for available options.

警告

Eggplantは、MinIOの設定の変更をサポートしていません。

既存のMinIO

既存のMinIOインストールがある場合、上記で作成した同じシークレットを使用して、次のように使用できます:

# dai.yaml \{#daiyaml-2}

global:
objectStorage:
minio:
existingSecret: dai-objectstorage
endpoint: my.minio.deployment.example.com

minio:
enabled: false

注: minio キーを使用して enabledfalse に設定します。これにより、バンドルされたMinIOのデプロイが防止されます。 This prevents the bundled MinIO from being deployed. This prevents the bundled MinIO from being deployed.

警告

DAIインストールの外部のMinIOインストールに対して、Eggplantはサポートを提供できません。

S3

AWS S3は、次のように既存のシークレットを使用してオブジェクトストレージに設定できます。まず、次の資格情報で既存のシークレットを準備します: First, prepare an existing secret with credentials in: First, prepare an existing secret with credentials in: まず、以下に認証情報を含む既存のシークレットを用意してください:

# dai-objectstorage.yaml \{#dai-objectstorageyaml-1}

apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: dai-objectstorage
stringData:
aws-access-key-id: my-access-key-id
aws-secret-access-key: my-secret-access-key
$ kubectl -n dai apply -f dai-objectstorage.yaml

次に、次のキーを更新または追加して値ファイルを変更します:

# dai.yaml \{#daiyaml-3}

global:
objectStorage:
provider: "aws"
aws:
existingSecret: dai-objectstorage
awsAccessKeyIdKey: aws-access-key-id
awsSecretAccessKeyKey: aws-secret-access-key
region: "eu-west-1"

minio:
enabled: false

次に、クラスタにHelmを使用してデプロイできます。

PostgreSQL

Eggplant DAIはデータストレージのためにPostgreSQLを使用しています。Helmチャートは、それを設定するためのいくつかのオプションを提供しています。 The Helm chart provides several options for configuring it. The Helm chart provides several options for configuring it.

バンドルされたPostgreSQL(デフォルト)

デフォルトでは、Eggplant DAI Helmチャートはユーザー名とパスワードの両方を postgres に設定して、PostgreSQLをサブチャートとしてデプロイします。

これを上書きするには、次の資格情報でシークレットを作成します:

# dai-postgres.yaml \{#dai-postgresyaml}

apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: dai-postgres
stringData:
postgres-password: my-access-key-id

次に、次のキーを更新または追加して値ファイルを変更し、クラスタにHelmを使用して適用します:

# dai.yaml \{#daiyaml-4}

global:
postgresql:
auth:
existingSecret: dai-postgres

keycloak:
externalDatabase:
existingSecret: dai-postgres
existingSecretPasswordKey: postgres-password

注: keycloak.externalDatabase.existingSecretPasswordKey は、デフォルトでは、Bitnamiチャートは既存のシークレットがキー password の下にデータベースのパスワードを持っていることを期待していますが、Bitnami PostgreSQLチャートとDAIはキーとして postgres-password をデフォルトとして使用しています。上記のように、Keycloakチャートの動作をオーバーライドすることもできますし、代わりに global.postgresql.auth.secretKeys.adminPasswordKey を設定することもできます。 You can either overrirde the behaviour of the Keycloak chart, as above, or alternatively you could set global.postgresql.auth.secretKeys.adminPasswordKey. You can either overrirde the behaviour of the Keycloak chart, as above, or alternatively you could set global.postgresql.auth.secretKeys.adminPasswordKey.

PostgreSQLのインストールはBitnamiチャートによって提供されています。postgresqlキーの下でvaluesファイルにオプションを渡すことで、さらにカスタマイズすることができます。利用可能なオプションについては、Bitnamiのドキュメントを参照してください。 PostgreSQLのインストールはBitnamiチャートによって提供されています。postgresqlキーの下でvaluesファイルにオプションを渡すことで、さらにカスタマイズすることができます。利用可能なオプションについては、Bitnamiのドキュメントを参照してください。 You can further customise it by passing options to it under the postgresql key in your values file. See the Bitnami documentation for available options.

extraEnvVarsを上書きする場合、POSTGRESQL_DATABASE環境変数もkeycloakに設定することを確認する必要があります。これにより、デフォルトの値のkeycloakキーの下で設定されたKeycloakデータベースが作成されます。 This creates the Keycloak database that is configured under the keycloak key in the default values. This creates the Keycloak database that is configured under the keycloak key in the default values.

警告

EggplantはPostgreSQLの設定の変更をサポートしていません。

既存のPostgreSQL

既存のPostgreSQLのインストールがある場合、またはAWS RDSのような外部サービスを使用したい場合は、それを行うことができます。

上記と同じ既存の秘密を使用して、次のキーを設定するようにvaluesファイルを変更します:

# dai.yaml \{#daiyaml-5}

global:
postgresql:
host: my.postgresql.host.example.com
auth:
existingSecret: dai-postgres

keycloak:
externalDatabase:
existingSecret: dai-postgres
existingSecretPasswordKey: postgres-password
host: my.postgresql.host.example.com

postgresql:
enabled: false

既存のPostgreSQLデプロイメントを使用する場合、これを使用するようにKeycloakの設定も更新する必要があります。

エンジンのスケーリング

Eggplant DAIのエンジンコンポーネントは、テストの実行とレポートの生成に使用されます。DAIインスタンスが忙しくなると、このコンポーネントをスケーリングして、より大きなテストボリュームを処理する必要があります。このスケーリングを管理するためにKedaを使用することをお勧めします。 Eggplant DAIのエンジンコンポーネントは、テストの実行とレポートの生成に使用されます。DAIインスタンスが忙しくなると、このコンポーネントをスケーリングして、より大きなテストボリュームを処理する必要があります。このスケーリングを管理するためにKedaを使用することをお勧めします。 As your DAI instance becomes busier, you will need to scale this component to handle greater test volumes. We recommend using Keda to manage this scaling.

Kedaを使用するには、まずupstream instructionsに従ってインストールします。

ヒント

サポートされているのはKeda v2のみです。

次に、valuesファイルに以下を追加してKedaを有効にします:

# dai.yaml \{#daiyaml-6}

ai-engine:
keda:
enabled: true

何らかの理由でKedaを使用できない場合、以下をvaluesファイルに追加して、エンジンレプリカの数を手動で管理することができます。イ ンスタンスが忙しくなるにつれて、それを増やします。

# dai.yaml \{#daiyaml-7}

ai-engine:
replicaCount: 2

Keycloak

Eggplant DAI depends on Keycloak for authentication and authorisation services. We bundle this as a sub-chart and do not currently support using your own Keycloak installation.

バックアップと復元

DAIのインストールからの設定と結果のデータを定期的にバックアップする必要があります。 バックアップする必要があるデータは、PostgreSQL(DAIおよびKeycloak用に設定されている)およびオブジェクトストレージに保存されています。

このデータをバックアップする方法は、デプロイメントの設定方法によって異なりますが、このドキュメントの開始時に示されているデフォルトのインストールで両方をバックアップする方法の例を提供します。

PostgreSQLのバックアップと復元

Eggplant DAIは、データを保存するためにいくつかのデータベースを使用しています。したがって、デフォルトのインストールでpg_dumpallを使用して、すべてのデータベースをバックアップすることをお勧めします。 共有データベースインスタンスを使用している場合、次のデータベースをバックアップすることを確認する必要があります:

  • execution_service
  • keycloak
  • sut_service
  • ttdb
  • vam

以下の例では、デフォルトのPostgreSQLポッド内でpg_dumpallを直接実行します。結果は、ローカルコンピューターのdai.dumpファイルにストリームされます: 以下の例では、デフォルトのPostgreSQLポッド内でpg_dumpallを直接実行します。結果は、ローカルコンピューターのdai.dumpファイルにストリームされます: The result is then streamed to dai.dump file on the local computer: 以下の例では、デフォルトのPostgreSQLポッド内でpg_dumpallを直接実行します。結果は、ローカルコンピューターのdai.dumpファイルにストリームされます: The result is then streamed to dai.dump file on the local computer:

$ kubectl --namespace dai exec postgres-0 \
-- /bin/sh -c \
'export PGPASSWORD=$POSTGRES_PASSWORD && pg_dumpall --username postgres --clean' \
> dai.dump
警告

The command given here includes the --clean option. ここで与えられたコマンドには--cleanオプションが含まれています。これにより、pg_dumpallにダンプのデータベースをドロップするコマンドが含まれるようになります。これにより復元が簡単になりますが、これが発生することを知っておく必要があります。 This makes restoring it easier, but you should know this will happen. This makes restoring it easier, but you should know this will happen.

実際には、次のことをしたいでしょう:

  • ダンプを圧縮する
  • バックアップストレージサーバーに配置する
  • スケジュールに従って実行する。

ただし、pg_dumpallの使用はそのまま維持されます。

バックアップを復元するには、次のようにプロセスを反転させることができます:

$ kubectl --namespace dai exec postgres-0 \
-- /bin/sh -c \
'export PGPASSWORD=$POSTGRES_PASSWORD && psql --username postgres \
--dbname postgres \
--file -' < dai.dump

いくつかの注意点:

  • -We used the --clean option when creating the dump. This means all databases in the backup will be dropped and recreated.
  • -We specify --dbname postgres. --dbname postgresを指定します。バックアップが--cleanで作成されたため、復元の一部としてドロップされるデータベースのいずれかに接続すると、エラーが発生します。

MinIOのバックアップと復元

Images and other assets are stored in object storage rather than the database. You must back these up in addition to the database content discussed above. A quick way to run this backup from your local machine is demonstrated below. The example below requires you to have the MinIO clienttools installed locally.

$ ROOT_USER=$( kubectl get secret dai-objectstorage -o json | jq -r '.data."root-user"' | base64 -d )
$ ROOT_PASSWORD=$( kubectl get secret dai-objectstorage -o json | jq -r '.data."root-password"' | base64 -d)
$ kubectl port-forward service/minio 9000:9000 &
$ PID=$!
$ mcalias set minio <http://localhost:9000> $ROOT_USER $ROOT_PASSWORD -api S3v4
$ mkdir backup
$ mc cp --recursive --quiet minio/ backup/
$ kill $PID

前述のように、バックアップを圧縮し、適切なストレージサーバーに移動し、スケジュールで実行することをお勧めします。

バックアップを復元するには、コピーコマンドを逆にするだけです:

$ mc mb minio/assets
$ mc mb minio/screenshots
$ mc cp --recursive --quiet backup/ minio/

デフォルトの設定で別々のアセットとスクリーンショットのバケットを使用していると仮定すると、復元する前にmc mbでバケットを作成する必要があります。

アップグレード

アップグレードの一般的な手順は、任意のHelmリリースと同じです:

  • PostgreSQLデータとオブジェクトストレージデータをバックアップします。
  • 1.PostgreSQLとオブジェクトストレージのデータをバックアップします。 2.helm repo updateでリポジトリを更新します。 3.バンドルされたMinioを使用している場合、Minioのデプロイメントのルートユーザーとパスワードを取得します。 4.Keycloakのデプロイメントのルートユーザーとパスワードを取得します。 5.既存の値を取得し、必要な新しい値に変換します。 6.helm uninstall -n dai daiで古いデプロイメントをアンインストールします。 7.さらに、kubectl -n dai delete jobs --all && kubectl -n dai delete pvc --allで古いPVCとジョブをすべて削除します。 8.次のようにしてHelm 6.5のリリースをインストールします:
  • helm get valuesとテキストエディターで新しいリリースの必要に応じて値を変更します。
  • helm upgradeを実行します。

Each Eggplant DAI release may have specific additional steps. So before applying this procedure, please review the notes below for the upgrade you're performing.

DAI 7.0 から 7.1 へのアップグレード

7.0から7.1へのアップグレードについては、上記の一般的なガイダンスの他には、具体的な手順はありません。

DAI 6.5 から 7.0 へのアップグレード

DAI 7.0 のリリースには、以前のバージョンと互換性のないMinioのアップデートが含まれています。 バンドルされたMinioをオブジェクトストレージとして使用している場合、古いMinioのインストールをバックアップし、Daiのアップグレード後にデータを復元する必要があります:

  • -で説明されているように、現在のMinioのインストールをバックアップします。 -現在のMinioのデプロイメントとPVCを削除します。 現在のMinioのデプロイメントとPVCを削除します。 kubectl delete pvc -l app.kubernetes.io/name=minio --wait=false && kubectl delete deployment -l app.kubernetes.io/name=minio -Review values and run helm upgrade.
  • 現在のMinioのデプロイメントとPVCを削除します。 現在のMinioのデプロイメントとPVCを削除します。 kubectl delete pvc -l app.kubernetes.io/name=minio --wait=false && kubectl delete deployment -l app.kubernetes.io/name=minio
  • 値を確認し、helm upgradeを実行します。 これにより、他のDAIコンポーネントをアップグレードすると同時に、Minioのクリーンなインストールが作成されます。
  • で説明されているように、既存のMinioデータを新しいMinioデプロイメントに復元します。

DAI 6.4 から 6.5 へのアップグレード

DAI 6.5は、以前のリリースと互換性のない新しいHelmチャートを導入します。 このリリースの推奨アップグレード手順は次のとおりです:

  1. PostgreSQLとオブジェクトストレージのデータをバックアップします。
  2. -PostgreSQLデータとオブジェクトストレージデータをバックアップします。 -helm repo updateでリポジトリを更新します。 -helm get valuesとテキストエディターで新しいリリースの必要に応じて値を変更します。 -helm upgradeを実行します。
  3. バンドルされたMinioを使用している場合、Minioのデプロイメントのルートユーザーとパスワードを取得します。
  4. Keycloakのデプロイメントのルートユーザーとパスワードを取得します。
  5. 既存の値を取得し、必要な新しい値に変換します。
  6. helm uninstall -n dai daiで古いデプロイメントをアンインストールします。
  7. さらに、kubectl -n dai delete jobs --all && kubectl -n dai delete pvc --allで古いPVCとジョブをすべて削除します。
  8. 次のようにしてHelm 6.5のリリースをインストールします:
helm install -n dai dai eggplant/dai --version 1.3.4 -f new-values.yaml --wait

バンドルされたMinioを使用している場合、バックアップからデータを復元します。

The exact process may vary depending on your previous deployment. Please be careful to verify backups before deleting resources and to delete the correct resources.

チャートのドキュメントの残りを確認して新しい値ファイルを作成することをおすすめしますが、以下はpre-6.5値ファイルのキーから6.5+値ファイルの場所へのマッピングです。これは移動した値の完全なリストではありません。必要なすべてのキーを正しく設定するために、値のドキュメンテーションを確認する必要があります。

Old KeyNew Key
global.adminusernamekeycloak-user-provisioner.adminUsers.daiAdmin.username
global.adminEmailkeycloak-user-provisioner.adminUsers.daiAdmin.email
global.adminPasswordkeycloak-user-provisioner.adminUsers.daiAdmin.password
global.licenseglobal.devLicense, global.execLicense
externalDatbaseglobal.postgresql
externalBrokerglobal.rabbitmq
objectStorageglobal.objectStorage
ingress.hostnamesglobal.ingress.host
ingress.tlsglobal.ingress.tls
keda.enabledai-engine.keda.enabled
keycloak.realmglobal.keycloak.realm
keycloak.urlglobal.keycloak.host
keycloak.adminUserglobal.keycloak.user
keycloak.adminPasswordglobal.keycloak.password
keycloak.smtpkeycloak-realm-provisioner.smtp

DAI 6.3 から 6.4 へのアップグレード

DAI 6.4 のリリースには、Keycloakの内部バージョンがバージョン19に更新されています。この新しいバージョンにアップグレードするには:

  • yamlファイルを編集して、keycloak.adminPasswordキーをkeycloak.auth.adminPasswordに移動します。
  • デフォルトの管理ユーザー名を使用していない場合、keycloak.adminUserキーをyaml内のkeycloak.auth.adminUserに移動します。
  • -yamlファイルを編集して、keycloak.adminPasswordキーをkeycloak.auth.adminPasswordに移動します。 -デフォルトの管理ユーザー名を使用していない場合、keycloak.adminUserキーをyaml内のkeycloak.auth.adminUserに移動します。 -The helm upgrade process deploys a new StatefulSet which is incompatible with the existing StatefulSet. helmのアップグレードプロセスは、既存のStatefulSetと互換性のない新しいStatefulSetをデプロイします。したがって、helmのアップグレードを実行する前に、元のStatefulSetを削除する必要があります(このステップが完了すると、DAIインスタンスは6.4へのアップグレードが完了するまでアクセスできなくなります):
$ kubectl delete statefulsets.app -l app.kubernetes.io/name=keycloak --namespace dai

DAIバージョン 6.2 から 6.3 へのアップグレード

  • -If you use KEDA, v1 is no longer supported. KEDAを使用している場合、v1はサポートされていません。DAIをアップグレードする前にKEDA v2にアップグレードする必要があります。これを行うには、KEDAをアップグレードする前にai-engineジョブを削除することを確認してください。
$ kubectl -n dai delete job ai-engine

DAIバージョン 5.3 から 6.0 へのアップグレード

  • -サービストークンとJWTの秘密を設定する必要はもうありません。これらの値を削除します。 Remove these values. これらの値を削除します。
  • Helm チャートは、Keycloak インスタンスを他の DAI コンポーネントと同じ名前空間にデプロイします。 ただし、Keycloak URL は https://kc-<ingress-hostname> に設定 <ingress-hostname> は値ファイルで指定したParameterー値 を指定する必要があります。

アンインストール

Eggplant DAIをhelm uninstallでアンインストールするか、それをインストールした名前空間を削除することでアンインストールできます。

外部のリソース、例えば PostgreSQL インスタンスや S3 バケットをカスタマイズして使用した場合、これらを別々に削除する必要があります。

完全なドキュメントは、Eggplant DAIチャートでサポートされているすべての値を示しています。

サポート

さらなるサポートが必要な場合は、Eggplantカスタマーサポートに連絡してください。